<?php

class Application_Model_CampeonatoMapper
{

        protected $_dbTable;

    public function  __construct()
    {
        $this->_dbTable = array();
    }

    public function setDBTable ($nomeClasseBD)
    {

        $tabelaBD = $nomeClasseBD;

        if (is_string($tabelaBD)) {
            $tabelaBD = new $tabelaBD();
        }
        if (!$tabelaBD instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Tabela invalida');
        }

        $this->_dbTable[$nomeClasseBD] = $tabelaBD;
        return $this;
    }

    public function getDBTable ($nomeTabelaBD = 'Campeonato')
    {
        $nomeClasseBD = 'Application_Model_DbTable_'.$nomeTabelaBD;
        if (!array_key_exists($nomeClasseBD, $this->_dbTable)) {
            $this->setDBTable($nomeClasseBD);
        }
        return $this->_dbTable[$nomeClasseBD];
    }


    /**
     * Insere um campeonato no banco de dados.
     *
     * @param Application_Model_Campeonato $campeonato Modelo em memoria do time
     *
     */
    public function salvar (Application_Model_Campeonato $campeonato)
    {
        $dados = array(
            'nome'  => $campeonato->getNome()
        );

        $this->getDbTable('Campeonato')->insert($dados);

    }

        /**
     * Associa um time a um campeonato no banco de dados.
     *
     * @param Application_Model_Campeonato $campeonato Modelo em memoria do campeonato
     * @param Application_Model_Time $time Modelo em memoria do time
     *
     */
    public function associaTime (Application_Model_Campeonato $campeonato, Application_Model_Time $time)
    {
        $dados = array(
            'nome_campeonato'  => $campeonato->getNome(),
            'nome_time' => $time->getNome()
        );

        $this->getDbTable('CampeonatoTime')->insert($dados);

    }

    public function fetchAll ()
    {

        $tabela = $this->getDBTable();

        $busca = $tabela->fetchAll();

        $resultado = array();

        foreach ($busca as $atual)
        {
            $resultado[] =  new Application_Model_Campeonato($atual['nome']);
        }

        return $resultado;
    }

    public function localizar($id)
    {
        $result = $this->getDBTable()->find($id);
        if (0 == count($result)) {
            return;
        }
        $row = $result->current();
        $campeonato = new Application_Model_Campeonato($row->nome);

        return $campeonato;
    }

}

